/**
 * 
 */
package com.zd.ticketing.service;

import java.util.List;
import java.util.Map;

import com.zd.common.bean.model.UserIdInfo;
import com.zd.common.bean.model.UserInfo;
import com.zd.common.bean.model.UserReceiveInfo;
import com.zd.common.service.IBaseService;
import com.zd.ticketing.bean.vo.TicketOrderVo;

/**
 * @author lishi
 * @date 2018年11月8日 上午9:25:03
 */
public interface IUserInfoService extends IBaseService<UserInfo>{
	
	/**
	 * 根据景区公众号id和openid查找相关用户信息  没有就将用户信息保存并返回
	 * @param scenicSpotId 景区公众号id
	 * @param openid 公众号下用户的唯一标识
	 * @param nickname 用户当前的微信昵称
	 * @param img	用户当前的头像
	 * @return
	 * @throws Exception
	 */
	UserInfo findOpenId(Integer scenicSpotId,String openid,String nickname ,String img)throws Exception;
	
	/**
	 * 根据用户id查询用户的常用取票人信息和游客信息
	 * @param userId
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> findUserInformation(Integer userId)throws Exception;
	
	/**
	 * 将json字符串中的客户信息解析出来
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> analysisTouristJson (String touristJson ,boolean updateType) throws Exception;
	
	/**
	 * 存储或修改取票人基本信息
	 * @param userReceiveInfo 取票人信息
	 * @param userId 用户公众号下ID
	 * @throws Exception
	 */
	Map<String, String> saveOrUpdateUserReceiveInformation( UserReceiveInfo userReceiveInfo, Integer userId)throws Exception;
	
	/**
	 * 存储或修改游客基本信息
	 * @param userIdInfoList 游客信息
	 * @return userId 用户在公众号下的ID
	 * @throws Exception
	 */
	Map<String, String> saveOrUpdateUserIdInfInformation( List<UserIdInfo> userIdInfoList, Integer userId )throws Exception;
	
	/**
	 * 查找用户的订单
	 * @param userId 
	 * @return userId 用户在公众号下的ID
	 * @throws Exception
	 */
	Map<String, Object> findUserOrder(Integer userId)throws Exception;
	
	/**
	 * 将用户的支付OpenId存下来
	 * @param payOpenId 支付OpenId
	 * @param userId
	 * @throws Exception
	 */
	void savePayOpenId(String payOpenId, Integer userId)throws Exception;
	
	/**
	 * 分页查询用户已完成的订单
	 * @param page 第几页
	 * @param userId
	 * @return
	 * @throws Exception
	 */
	List<TicketOrderVo> pageTicketOrder(Integer page, Integer userId)throws Exception;
}
